import os
import re
from pydub import AudioSegment

def natural_keys(text):
    """
    将文件名解析为包含整数的部分，以实现自然排序。
    """
    return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]

def merge_wav_files(directory, output_filename='new.wav'):
    # 获取所有 .wav 文件，并按文件名中的数字部分进行自然排序
    wav_files = [f for f in os.listdir(directory) if f.lower().startswith('1')]
    
    if not wav_files:
        print("没有找到任何 .wav 文件。")
        return
    
    # 使用自然排序键对文件列表进行排序
    wav_files.sort(key=natural_keys)
    
    # 完整输出文件路径
    output_filepath = os.path.join(directory, output_filename)
    
    try:
        # 初始化一个空的 AudioSegment 对象用于存储合并后的音频
        combined_audio = AudioSegment.empty()
        
        for filename in wav_files:
            file_path = os.path.join(directory, filename)
            audio_segment = AudioSegment.from_wav(file_path)
            combined_audio += audio_segment
        
        # 导出合并后的音频到新的 .wav 文件
        combined_audio.export(output_filepath, format="wav")
        print(f"所有 .wav 文件已成功合并到 {output_filepath}")
    except Exception as e:
        print(f"发生错误: {e}")

if __name__ == "__main__":
    # 获取用户输入的目录名
    directory = 'app/input/f83ef92d8f4544969a35bd40d0bf0bb1/'
    # 如果目录存在，则执行合并操作
    if os.path.isdir(directory):
        merge_wav_files(directory)
    else:
        print("提供的目录不存在，请检查输入路径。")